package com.iflytek.day13.p02;

class Animal {
  public void eat() {
    System.out.println("动物吃东西！");
  }
}

class Cat extends Animal {
  public void eat() {
    System.out.println("吃鱼");
  }

  public void catchMouse() {
    System.out.println("抓老鼠");
  }
}

class Dog extends Animal {
  public void eat() {
    System.out.println("吃骨头");
  }

  public void watchHouse() {
    System.out.println("看家");
  }
}

public class Test {
  public static void main(String[] args) {
    // 向上转型
    Animal a = new Cat();
    a.eat();        // 调用的是 Cat 的 eat
    // a.catchMouse();// 编译报错，编译看左边，Animal没有这个方法

    // 向下转型
    // Cat c = (Cat) a;
    // c.catchMouse();    // 调用的是 Cat 的 catchMouse
    // 向下转型
    // Dog d = (Dog) a;
    // d.watchHouse();        // 调用的是 Dog 的 watchHouse 【运行报错】

    // 向下转型
    if (a instanceof Cat) {
      Cat c = (Cat) a;
      c.catchMouse();        // 调用的是 Cat 的 catchMouse
    } else if (a instanceof Dog) {
      Dog d = (Dog) a;
      d.watchHouse();       // 调用的是 Dog 的 watchHouse
    }

  }
}
